import CryptoJS from 'crypto-js'
import md5 from '@/utils/md5'

// let name = ''; //内部调用
var key = CryptoJS.enc.Latin1.parse('r4OMzLkMivzs4f9u');//前后端保持一致
var iv = CryptoJS.enc.Latin1.parse('vVZHqEald49oKpAa');//前后端保持一致

// 前端加密传输参数
function encrypt(json_data) {
  var encryptedData = CryptoJS.AES.encrypt(json_data, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.ZeroPadding
  }).toString();
  //数据加密end
  return encryptedData;
}

//前端解密（后端数据）
function decode_h(string) {
  let result = CryptoJS.AES.decrypt(string, CryptoJS.enc.Utf8.parse('r4OMzLkMivzs4f9u'), {
    iv: CryptoJS.enc.Utf8.parse('vVZHqEald49oKpAa'),
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  })
  return result.toString(CryptoJS.enc.Utf8)
}
//前端解密（前端自加密）
function decode_q(string) {
  let decrypt = CryptoJS.AES.decrypt(string, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.ZeroPadding
  });
  return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}

// 验证签名
function ident(obj) {
  /*
  obj 传入的对象
  obj :{
      func:'',  //请求接口方法名 (!!必须)

      // 接口所需的参数
      name:'用户名',
      age:'18',
  }
  */
  let nonce = md5.getNum();//获取随机数
  let timestamp = Date.parse(new Date()) / 1000;//获取时间戳
  let sign = md5.get_MD5(obj.func, nonce, timestamp);//加密方法
  obj.nonce = nonce;
  obj.timestamp = timestamp;
  obj.sign = sign;
  return obj //返回验签的参数（包含接口所需参数）
}

export default { encrypt, decode_h, decode_q, ident }
